/*	
	Universidad: Universidad Nacional de Río Cuarto (UNRC)
	Materia: Taller de Diseño de Software (Cod. 3306)
	Carrera: Licenciatura en Ciencias de la Computación
	Proyecto 2011: Compilador de un subconjunto del lenguaje C (C--).
	Integrantes:
		Bettiol, Matías Nicolas.
		Mattana, Diego Leonel.
*/

#ifndef _Cod3D_
#define _Cod3D_
#include "Lista.h"

typedef struct TElemCodigo{
	char *enumerado;
	TElemLista *opUno;
	TElemLista *opDos;
	TElemLista *resultado;	
}TElemCodigo;

typedef struct nodoCodigo{
	TElemCodigo e;
	struct nodoCodigo *sig;
}NodoCodigo;

typedef NodoCodigo* Cod3D;

// Retorna una nueva lista.
Cod3D openListaCodigo();

// Retorna el 1er elemento de la lista de codigo de 3 direcciones.
TElemCodigo popCodigo(Cod3D *l);

// Inserta un nuevo elemento en la lista.
// Retorna 0 si no se puede insertar.
int addCodigo3D(Cod3D *l , TElemCodigo e);

// Retorna la lista  de codigo de 3 direcciones ordenada al reves.
Cod3D reversa(Cod3D l);

// Imprime el elemento "e" de la lista.
void printTElemCodigo(const TElemCodigo e);

// Retorna una nueva lista.
TElemCodigo openCodigo();

// Imprime la lista.
void printListaCodigo(Cod3D l);

#endif
